#!/bin/bash

echo "docker run 开始构建镜像并启动容器,该镜像支持一个参数 1、指定镜像名称"
# 公共路径（挂载卷用到，确保容器内存在）
common_path=/planet/programs/AT-test

##################################### 公共变量 ####################################################
# shellcheck disable=SC2164
# 进入到该目录，不然dockerfile中ADD时找不到文件路径(jenkins执行shell的默认路径是 /root可在当前shell中pwd打印查看)
cd $common_path
cur_path=$(pwd)
echo "当前路径：$cur_path"

app_name=${1:-"ai-test"}

FINAL_IMAGE_TAG=latest


# 获得docker容器id和镜像id，查询 app_name容器信息，并获取列表第一个($1)参数
# shellcheck disable=SC2006
container_ids=`docker ps -a | grep "$app_name" | awk '{print $1 }'`
# shellcheck disable=SC2006
img_ids=`docker images | grep "$app_name" | awk '{print $3 }'`

############################ 使用deploy.sh 构建镜像并启动容器（小项目可用，大项目就不推荐了） ###########################
# 如果容器正在运行，停止它
while IFS= read -r container_id; do
  # 获取容器状态
  status=$(docker inspect --format='{{.State.Status}}' "$container_id")
  # 这里也可以不用加状态判断，直接停止删除
  if [[ "$status" = "running" || "$status" = "restarting" || "$status" = "exited" ]]; then
    echo "Stopping $status container: $container_id"
    docker stop "$container_id"
    echo "Delete container: $container_id"
    docker rm -f "$container_id"
  fi
done <<< "$container_ids"

# 删除镜像
while IFS= read -r img_id; do
  echo "delete image: $img_id"
  docker rmi -f "$img_id"
done <<< "$img_ids"

# 生成镜像,可用 -f Dockerfile 指定文件名称（如无法构建，写dockerfile绝对路径）
docker build -t "$app_name":"$FINAL_IMAGE_TAG" --no-cache -f ./Dockerfile .

# 启动镜像  60001为工程的端口【挂载的目录 容器内目录保证存在，不存在则先创建 RUN mkdir -p xxx】
# ro:只读  rw:读写
# 使用参数  -e SPRING_PROFILES_ACTIVE=dev 指定环境变量，-e形式优先级高于其他（此处在docker-compose中或dockerfile中配置）
#--network="host" \
docker run -d -p 8085:8085 \
    -v "$common_path"/logs:"$common_path"/logs:rw \
    --name "$app_name" \
    "$app_name":"$FINAL_IMAGE_TAG"
